#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

typedef int ListValType;

typedef struct ListNode
{
	ListValType val;
	struct ListNode* prev;
	struct ListNode* next;
}ListNode;

//双向链表的初始化
ListNode* ListInit();

//双向链表的打印
void ListPrint(ListNode* phead);

//尾插
void ListPushBack(ListNode* phead,ListValType x);

//头插
void ListPushFront(ListNode* phead, ListValType x);

//尾删
void ListPopBack(ListNode* phead);

//头删
void ListPopFront(ListNode* phead);

//查找节点
ListNode* Find(ListNode* phead , ListValType x);

//在指定位置之后插入数据
void ListInsert(ListNode* pos, ListValType x);

//删除pos节点
void ListErase(ListNode* pos);

//链表的销毁
void ListDestory(ListNode* phead);